package com.i3.office.common.handler;

import java.time.LocalDateTime;

import org.apache.ibatis.reflection.MetaObject;
import org.springblade.core.secure.utils.AuthUtil;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.i3.office.config.Cons;

import lombok.extern.slf4j.Slf4j;

/**
 * 字段自动填充策略处理类
 *
 * @author 三石
 * @version 1.1
 * @date 2022-04-14
 */
@Component
@Slf4j
public class AutoFillMetaObjectHandler implements MetaObjectHandler {
	/*
	 * 创建数据时，创建时间与更新时间都由数据库进行自动填充
	 *
	 * 如果数据库没有自动填充功能可以使用此策略
	 *
	 */
	@Override
	public void insertFill(MetaObject metaObject) {
		try {
			// 自动填充创建人
			if (metaObject.hasSetter(Cons.FieldName.createBy.name())) {
				this.strictInsertFill(metaObject, Cons.FieldName.createBy.name(), AuthUtil.getUser()::getUserCode, String.class);
			}

			// 自动填充创建时间
			if (metaObject.hasSetter(Cons.FieldName.createTime.name())) {
				this.strictInsertFill(metaObject, Cons.FieldName.createTime.name(), LocalDateTime::now, LocalDateTime.class);
				// this.strictInsertFill(metaObject, Cons.FieldName.createTime.name(), Date::new, Date.class);
			}
		} catch (Exception e) {
			log.error("自动填充创建人和创建时间失败！");
		}
	}

	@Override
	public void updateFill(MetaObject metaObject) {

		try {
			// 自动填充修改人
			if (metaObject.hasSetter(Cons.FieldName.createBy.name())) {
				this.strictUpdateFill(metaObject, Cons.FieldName.updateBy.name(), AuthUtil.getUser()::getUserCode, String.class);
			}

			// 自动填修改时间
			if (metaObject.hasSetter(Cons.FieldName.createTime.name())) {
				this.strictUpdateFill(metaObject, Cons.FieldName.updateTime.name(), LocalDateTime::now, LocalDateTime.class);
				// this.strictInsertFill(metaObject, Cons.FieldName.updateTime.name(), Date::new, Date.class);
			}
		} catch (Exception e) {
			log.error("自动填充修改人和修改时间失败！");
		}

	}
}
